package com.misboot.document.service;

import com.misboot.document.utils.PageUtil.PageParam;
import com.misboot.document.utils.PageUtil.PageSet;
import com.misboot.document.model.DfsFile;
import com.misboot.document.model.OssPageParam;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.Bucket;

import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * File
 *
 * @Author 湖南佐佑时代科技有限公司
 * @Version 5.4.21
 * @Email service@zuoyo.com
 * @Date 2022-06-16 13:31:39
 */
public interface OssService extends DocumentBaseService<DfsFile, String> {

	/**
	 * 列出所有桶
	 *
	 * @return
	 * @Param endpoint 端点
	 */
	List<Bucket> listBuckets(String endpoint);

	/**
	 * 分页
	 *
	 * @return
	 * @Param pageParam 分页参数
	 * @Param filterSort 过滤排序字段
	 */
	PageSet<DfsFile> getPageSet(PageParam pageParam, String filterSort);

	/**
	 * 根据UUID查询数据
	 *
	 * @return DfsFile
	 * @Param  uuid
	 */
	DfsFile queryObject(String uuid);

	/**
	 * 根据UUID查询数据
	 *
	 * @return List
	 * @Param  map
	 */
	List<DfsFile> queryList(Map<String, Object> map);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	int queryTotal(Map<String, Object> map);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
    int executeSave(DfsFile dfsFile);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	int executeUpdate(DfsFile dfsFile);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	int executeDelete(String uuid);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	int executeDeleteBatch(String[] uuids);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	Map<String,Object> listObjectsRequest(OssPageParam ossPageParam, String search);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	String getObjectACL(String objectName, String endpoint, String bucketName);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	String getBucketACL(String endpoint, String bucketName);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	URL getGeneratePresignedUrl(String bucketName, String endpoint, String objectName, Date expiration);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	 void openOssClient(String endpoint);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	OSSClient getOssClient();

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	List<String> deleteObjects(String[] uuids, String endpoint, String bucketName);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	void putObject(String bucketName, String endpoint, String objectName, byte[] bytes);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	void CreateFolder(String endpoint, String bucketName, String catalog, String keyPrefix);

	/**
	 * 查询数据条数
	 *
	 * @return int
	 * @Param  map
	 */
	void putObjectACL(String bucketName, String endpoint, String objectName, byte[] bytes);

	/**
	 * @MethodName moveFile
	 * @Description   oss 移动文件
	 * @Param sourceBucketName   源通
	 * @Param sourceKey  文件名
	 * @Param destinationBucketName  目标通
	 * @Param endpoint
	 * @Return java.lang.Object
	 * @Author 湖南佐佑时代科技有限公司<service@zuoyo.com>
	 * @Date 2020-10-22 11:33
	 */
	Object ossFileMoveBucket(String sourceBucketName,String sourceKey,String destinationBucketName,String endpoint);


	/**
	 * 文件移动
	 *
	 * @return Object
	 * @Param sourceBucketName  源存储空间名称
	 * @Param sourceKey  源文件名称
	 * @Param destinationBucketName  目标存储空间名称
	 * @Param endpoint Endpoint填写Bucket所在地域对应的Endpoint
	 * @Param destinationKey  目标文件名称
	 */
	Object ossFileMoveFolder(String sourceBucketName,String sourceKey,String destinationBucketName,String endpoint,String destinationKey);
}
